/**
 * 
 */
package projeto.comercial.cliente.cdp;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.FetchType;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
import javax.persistence.Entity;

import nucleo.comuns.util.UtilitarioSerializacao;

import plataforma.base.cdp.IObjetoAtivoInativo;
import plataforma.base.cdp.ObjetoPersistente;
import projeto.administrativo.colaboradorexterno.cdp.Contato;
import projeto.administrativo.colaboradorexterno.cdp.Informacao;
import projeto.ramoAtividade.cdp.RamoAtividade;

/**
 * @author mike
 * 
 */
@Entity
public class Cliente extends ObjetoPersistente implements IObjetoAtivoInativo {

	/**
	 * 
	 */
	private static final long serialVersionUID = UtilitarioSerializacao
			.getIDSerializacao();
	private String nome;
	private String endereco;
	private String telefone;
	private String email;
	private boolean ativo;
	private Set<Contato> contatos = new HashSet<Contato>();
	private Set<Informacao> informacoes = new HashSet<Informacao>();
	private RamoAtividade ramo;

	public Cliente() {
		this.ativo = true;
	}

	/**
	 * @return the nome
	 */
	@Column(nullable = false)
	public String getNome() {
		return nome;
	}

	/**
	 * @param nome
	 *            the nome to set
	 */
	public void setNome(String nome) {
		this.nome = nome;
	}

	/**
	 * @return the endereco
	 */
	public String getEndereco() {
		return endereco;
	}

	/**
	 * @param endereco
	 *            the endereco to set
	 */
	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}

	/**
	 * @return the telefone
	 */
	public String getTelefone() {
		return telefone;
	}

	/**
	 * @param telefone
	 *            the telefone to set
	 */
	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}

	/**
	 * @return the email
	 */
	public String getEmail() {
		return email;
	}

	/**
	 * @param email
	 *            the email to set
	 */
	public void setEmail(String email) {
		this.email = email;
	}

	/**
	 * @return the contatos
	 */
	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	public Set<Contato> getContatos() {
		return contatos;
	}

	/**
	 * @param contatos
	 *            the contatos to set
	 */
	public void setContatos(Set<Contato> contatos) {
		this.contatos = contatos;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see plataforma.base.cdp.IObjetoAtivoInativo#isAtivo()
	 */

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	public Set<Informacao> getInformacoes() {
		return informacoes;
	}

	@OrderBy("data")
	public void setInformacoes(Set<Informacao> informacoes) {
		this.informacoes = informacoes;
	}

	@Override
	@Column(columnDefinition = "boolean default false")
	public boolean isAtivo() {
		return this.ativo;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see plataforma.base.cdp.IObjetoAtivoInativo#setAtivo(boolean)
	 */
	@Override
	public void setAtivo(boolean isAtivo) {
		this.ativo = isAtivo;

	}

	/**
	 * @return the ramo
	 */
	@ManyToOne(fetch = FetchType.LAZY)
	public RamoAtividade getRamo() {
		return ramo;
	}

	/**
	 * @param ramo
	 *            the ramo to set
	 */
	public void setRamo(RamoAtividade ramo) {
		this.ramo = ramo;
	}

}
